package com.wgy.designmode.action.command;

import com.wgy.designmode.action.command.commond.BackwardCommond;
import com.wgy.designmode.action.command.commond.Commond;
import com.wgy.designmode.action.command.commond.CtrlCommond;
import com.wgy.designmode.action.command.commond.ForwardCommond;
import com.wgy.designmode.action.command.invoker.General;
import com.wgy.designmode.action.command.receiver.Soldier;

/**
 * 命令模式
 * 示例：将军和士兵   将军可以给士兵下达三种命令：前进、后退、卧倒
 *
 * 使用场景：当需要对行为进行记录、撤销/重做或事务处理时，使用命令模式来解耦请求者和执行者。
 *
 *
 */
public class CommandPatternDemo {

    public static void main(String[] args) {
        // 执行者
        Soldier soldier = new Soldier();

        //创建命令对象，并设置命令的执行者
        Commond forwardCommond = new ForwardCommond(soldier);

        Commond backwardCommond = new BackwardCommond(soldier);

        Commond ctrlCommond = new CtrlCommond(soldier);


        // 调用者
        General general =new General();
        general.takeCommond(forwardCommond);
        general.takeCommond(backwardCommond);
        general.takeCommond(ctrlCommond);


        general.executeCommond();

    }
}
